{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Naive Bayes Classification from Scratch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Naive Bayes classification is based on Bayes Theorem. Formula for Bayes theorem is\n",
    "\\begin{equation*}\n",
    "P(class_i/x)   =\\frac{P(x/class_i)*P(class_i)}{P(x)}\\\\\n",
    "\\end{equation*}\n",
    "where P(class_i/x) is the posterior probability function or probability that testing example is belongs class i given x(set of independent feature vectors)\n",
    "\n",
    "P(x/class_i) is the likelihood function (guassian distribution) or probability of feature present in x given class i\n",
    "\n",
    "p(class_i) is the prior probability function or ratio of number of training examples which belongs to class i to total number of training examples. we can neglect the denominator which represents marginal probability distribution.\n",
    "\n",
    "Likelihood function can be further splitted into product of individual features likelihood functions on an assumption that all the features are independent and there is no correlation between them (which is practically not possible)\n",
    "\n",
    "\\begin{equation*}\n",
    "P(class_i/x)=p(x/class_i)* p(class_i)/p(x)\\\\\n",
    "\\\\\n",
    "\\\\\n",
    "P(class_i/x)=p(f_1/class_i)*p(f_2/class_i)*p(f_3/class_i)*.....p(f_n/class_i) *p(class_i)\\\\\n",
    "\\end{equation*}\n",
    "\n",
    "where fi= ith feature in the dataset\n",
    "\n",
    "p(fi/class) is modelled as guassian distribution:\n",
    "\\begin{equation*}\n",
    "\\\\\n",
    "\\\\p(fi/class)=1/(sqrt(2*pi)*sigma)* e^-(testset's ith feature-avg(trainset's ith feature))**2/(2*sigma**2)\n",
    "P(class_i/x)=p(f1/class_i)*p(f2/class_i)*p(f3/class_i)*.....p(fn/class_i) *p(class_i)\\\\\n",
    "\\end{equation*}\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "Created on Thu Dec  6 15:20:06 2018\n",
    "\n",
    "@author: purandur\n",
    "\"\"\"\n",
    "\n",
    "#imporing libraries\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Naive_Bayes():\n",
    "    def __init__(self):\n",
    "        self.class_data_dic={}\n",
    "    \n",
    "    \n",
    "        \n",
    "    def fit(self,X_train,y_train):\n",
    "        def generate_data(class_data_dic,X_train,y_train):\n",
    "            first_one=True\n",
    "            first_zero=True\n",
    "            for i in range(y_train.shape[0]):\n",
    "                X_temp=X_train[i,:].reshape(X_train[i,:].shape[0],1)\n",
    "                if y_train[i]==1:\n",
    "                    if first_one==True:\n",
    "                        class_data_dic[1]=X_temp\n",
    "                        first_one=False\n",
    "                    else:\n",
    "                        class_data_dic[1]=np.append(class_data_dic[1],X_temp,axis=1)\n",
    "                elif y_train[i]==0:\n",
    "                    if first_zero==True:\n",
    "                        class_data_dic[0]=X_temp\n",
    "                        first_zero=False\n",
    "                    else:\n",
    "                        class_data_dic[0]=np.append(class_data_dic[0],X_temp,axis=1)\n",
    "            return class_data_dic\n",
    "    \n",
    "        self.X_train=X_train\n",
    "        self.y_train=y_train\n",
    "        self.class_data_dic[0]=np.array([[]])\n",
    "        self.class_data_dic[1]=np.array([[]])\n",
    "        self.class_data_dic=generate_data(self.class_data_dic,self.X_train,self.y_train)\n",
    "        self.class_data_dic[0]=self.class_data_dic[0].T\n",
    "        self.class_data_dic[1]=self.class_data_dic[1].T\n",
    "        self.mean_0=np.mean(self.class_data_dic[0],axis=0)\n",
    "        self.mean_1=np.mean(self.class_data_dic[1],axis=0)\n",
    "        self.std_0=np.std(self.class_data_dic[0],axis=0)\n",
    "        self.std_1=np.std(self.class_data_dic[1],axis=0)\n",
    "        \n",
    "        \n",
    "    def predict(self,X_test):\n",
    "        def posterior(X,X_train_class,mean_,std_):\n",
    "            def likelyhood(x,mean,sigma):\n",
    "                return np.exp(-(x-mean)**2/(2*sigma**2))*(1/(np.sqrt(2*np.pi)*sigma))\n",
    "            \n",
    "            product=np.prod(likelyhood(X,mean_,std_),axis=1)\n",
    "            product=product*(X_train_class.shape[0]/self.X_train.shape[0])\n",
    "            return product\n",
    "        \n",
    "        p_1=posterior(X_test,self.class_data_dic[1],self.mean_1,self.std_1)\n",
    "        p_0=posterior(X_test,self.class_data_dic[0],self.mean_0,self.std_0)\n",
    "        return 1*(p_1>p_0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    User ID  Gender  Age  EstimatedSalary  Purchased\n",
      "0  15624510    Male   19            19000          0\n",
      "1  15810944    Male   35            20000          0\n",
      "2  15668575  Female   26            43000          0\n",
      "3  15603246  Female   27            57000          0\n",
      "4  15804002    Male   19            76000          0\n",
      "5  15728773    Male   27            58000          0\n",
      "6  15598044  Female   27            84000          0\n",
      "7  15694829  Female   32           150000          1\n",
      "8  15600575    Male   25            33000          0\n",
      "9  15727311  Female   35            65000          0\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User ID</th>\n",
       "      <th>Age</th>\n",
       "      <th>EstimatedSalary</th>\n",
       "      <th>Purchased</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>4.000000e+02</td>\n",
       "      <td>400.000000</td>\n",
       "      <td>400.000000</td>\n",
       "      <td>400.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.569154e+07</td>\n",
       "      <td>37.655000</td>\n",
       "      <td>69742.500000</td>\n",
       "      <td>0.357500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>7.165832e+04</td>\n",
       "      <td>10.482877</td>\n",
       "      <td>34096.960282</td>\n",
       "      <td>0.479864</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.556669e+07</td>\n",
       "      <td>18.000000</td>\n",
       "      <td>15000.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.562676e+07</td>\n",
       "      <td>29.750000</td>\n",
       "      <td>43000.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.569434e+07</td>\n",
       "      <td>37.000000</td>\n",
       "      <td>70000.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.575036e+07</td>\n",
       "      <td>46.000000</td>\n",
       "      <td>88000.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.581524e+07</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>150000.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            User ID         Age  EstimatedSalary   Purchased\n",
       "count  4.000000e+02  400.000000       400.000000  400.000000\n",
       "mean   1.569154e+07   37.655000     69742.500000    0.357500\n",
       "std    7.165832e+04   10.482877     34096.960282    0.479864\n",
       "min    1.556669e+07   18.000000     15000.000000    0.000000\n",
       "25%    1.562676e+07   29.750000     43000.000000    0.000000\n",
       "50%    1.569434e+07   37.000000     70000.000000    0.000000\n",
       "75%    1.575036e+07   46.000000     88000.000000    1.000000\n",
       "max    1.581524e+07   60.000000    150000.000000    1.000000"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reading dataset\n",
    "Data=pd.read_csv('Social_Network_Ads.csv')\n",
    "print(Data.head(10))\n",
    "Data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set size : 300\n",
      "Testing set size : 100\n"
     ]
    }
   ],
   "source": [
    "#training and testing set size\n",
    "train_size=int(0.75*Data.shape[0])\n",
    "test_size=int(0.25*Data.shape[0])\n",
    "print(\"Training set size : \"+ str(train_size))\n",
    "print(\"Testing set size : \"+str(test_size))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Getting features from dataset\n",
    "Data=Data.sample(frac=1)\n",
    "X=Data.iloc[:,[2, 3]].values\n",
    "y=Data.iloc[:,4].values\n",
    "X=X.astype(float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#feature scaling\n",
    "from FeatureScaling import FeatureScaling\n",
    "fs=FeatureScaling(X,y)\n",
    "X=fs.fit_transform_X()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#training set split\n",
    "X_train=X[0:train_size,:]\n",
    "y_train=y[0:train_size]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#testing set split\n",
    "X_test=X[train_size:,:]\n",
    "y_test=y[train_size:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#visualize the training set \n",
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_train, y_train\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j,marker='.')\n",
    "plt.title('Training set')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#creating object for classifier\n",
    "nb=Naive_Bayes()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#fit the classifier\n",
    "nb.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred=nb.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[62  6]\n",
      " [ 8 24]]\n"
     ]
    }
   ],
   "source": [
    "#getting the confusion matrix\n",
    "tp=len([i for i in range(0,y_test.shape[0]) if y_test[i]==0 and y_pred[i]==0])\n",
    "tn=len([i for i in range(0,y_test.shape[0]) if y_test[i]==0 and y_pred[i]==1])\n",
    "fp=len([i for i in range(0,y_test.shape[0]) if y_test[i]==1 and y_pred[i]==0])\n",
    "fn=len([i for i in range(0,y_test.shape[0]) if y_test[i]==1 and y_pred[i]==1])\n",
    "confusion_matrix=np.array([[tp,tn],[fp,fn]])\n",
    "print(confusion_matrix)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAEWCAYAAABbgYH9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXt8XGWZ+L/PZJKmbdqk0EBaegML0iK2yEUjshQRRbwAilp0V2FBVnfVdXf9sa7uKsv+/ImuuuJlFWTB2wriHQVFLK0CVilIKlAuLbShaZvSW9KmbUgm8/z+eM/JnJycmTmTzJnJ5fl+Pvlk5px33vc558yc5zyX93lFVTEMwzCMcpOqtgCGYRjGxMQUjGEYhpEIpmAMwzCMRDAFYxiGYSSCKRjDMAwjEUzBGIZhGIkwoRWMiHxMRG6qthxjERHZIiKvSajvs0TkqcD7F4vIIyJyQEQ+JCJfF5F/S2DccXm9kzofXt+JXedqIiLvEpFfl7G/B0TklHL1F+r7JhH5WLnbVgsR+ZKIXBmrsaqO2T9gC7ATmB7YdiWwpspyrQF6gR6gG/gdcHK1z1dIxpnAF4HnPDk3ee9nB87tayoky/8A/1XmPlcAHdU+z2P9r5LXuQSZLgPuL6H9IkCBdELyvAn4lff6697vpQfoA/oD739Z7XNXhWs17H4LzPPuK0Wvx3iwYNLA31dbiAg+oKoNwJE4hfOd6oqTQ0TqgFXAScD5OGXzSmAPcEYVRFoIPF6FccccIpKutgzGMN6H9/tV1fepaoP32/5/wPf996r6+vAHJ+P1VNUO4BngjXEaj9k/3NPXR4G9QFOURgWuB7YC+4GHgbMC+64Bvuu9/hVOKQT7Xw+8xXt9InCPN9ZTwNsLyLUGuDLwfinQF3h/BrAW6AJ2AF8B6rx9XwU+H+rv58CHvddzgR8Bu4DNwIdC/T7kHetO4AsFnjp2Ag1Fzu1rYsgrwH8Bz+OstT8DL/H2XQBsAA4A24CPeNtX4FkXwL3AADmL7wTgm8D/DchyIdDmHdczwPne9suBJ7z+nwX+xts+HTgMZMk9Xc4NXm+v3Ztxiq3Lu2ZLQsf/Ee94uoHvA/V5zlUK+Feg3TsP3wYaw8ea59xeA/wQ+K53fFdG9D94Pvz+gKu9sXYAF3nn+mnc9/Njoe/4Dz35DwB/ApblkSWF+z09g3vYuB04wtu3CGclXI77Pe3D3XhP985RF/CVkNx/7V2ffcDdwMLAPvU+v9Hb/1Xcd2mJ910Y8K5bl9f+DcAj3jnaClwT6Os5rz//WrcSsoJwD1DrvGu5Dnhl6Pf6H8AD3jn6NTlLvg73XZoXcV2uIfB98rYtDpyn53Df75R3DTqJ/q591z8e4DXeNbka9xvfDrx7hG2bgTu9c/YgTiGuCR+H13Ya8D3vund57f1z0ATcgvuudQDXesd0cuha7Q7090ngG0Xv4aXc8Cv9553c1wA/JvcDDCuYv8RZEWngn7yLXB/+ggDvBh4IfG6pd6Kn4G5YW70vTRp4GbAbOCmPXGvwbhTeF/RTwO8C+08FXuH1tQj3I/QVyBneFyXlvZ8NHAKO9i7qw8AnvH6Pw91YX+e1XQv8lfe6AXhFHvluA74V59zGkPd1nkxN5G4Qc7x9O/AUOjALeFnwJhl1vrz33wxczzNwN4XzvOM/BjgxcNN5kTfu2d55ihwj4nqfABz0+q3F/Ug3kVOcW3A/srnAEd4xvy/Pufpr77PHeef9x8B3CsgRPLfX4NwsF3nHNzWi/+D5WAFkvO9ALfBe3M3le8AMnFXaCxwX6v8Sr/1HcA8mtRGyfBj4A87FMQW4AbjV27cId+P8OlAPvNYb56fAUd51eR4422t/kXdOluC+N/8K/D5wTAr8Ave9WeAdg//gcBkhF5l33Cd75+iluAeki0KypQPtB/vwrt8+4K88WS713h8Z+P49g/tOTPXeX+ftOwk4mOe6X0N+BXML7qY91ZP5Mu/61OMe0B4KfCasNDK4G3Qt7iHoIDBzBG1/CPyvJ8NLcA95+RTM33nXcipQA5yG9wDqXaf/9o6nBfd7vyLqfhvo7+3Ag8Xu4ePBRQbux/ZBEWkO71DV76rqHlXNqOrncT+cF0f08RNguYgs9N6/C/ixqr6AM/W2qOotXj9/wlkRlxSQ6Usi0oXT7B8A/j0g08Oq+gevry24H/LZ3r4HcTfUc73mK3EXcCfuabFZVa9V1T5VfRb4htcG3I1ksYjMVtUeVf1DHtmOxN38Y1FIXm/MGTgLT1T1CVXdEdi3VERmquo+77yVyhXAzap6j6pmVXWbqj7pyXWnqj6jjt/injzPitnvO4A7vX77gc/hflyvDLT5kqpuV9W9OCtyeZ6+3oWzFp9V1R7gX4CVJbhH1qrqT73jOxyjfT/wKU/u23APIder6gFVfRxnlb000P5hVf2h1/4LuJvcKyL6/Rvg46ra4X3vrwEuCR3Hf6hqr6r+Gnczu1VVn1fVbcB9wCmBvj7tfR8yuKfn4O8L3E28S1WfA1aT//yiqmtU9VHvHP0ZuJXcd7AYbwA2qup3vO/wrcCTuNiKzy2q+rR3/m8PyNKEs2pK5ZOqekhVD3syf9O7Pr2483qqiEzP89le3ANFv6reAbyAU36x24pILU7Jf8KT4TEKu+n7cd+jxao6oKoPqWqPiByDuxf9g3c8nbhY7coCfYE7Z01F2owPBeOdvF/gzPshiMg/icgTItLt3fAbcScy3McBnDnpn7iVOO0PLkbwchHp8v9wN5WWAmJ9SFWbcD/mNwI/FJGXejKdICK/EJFOEdmP+/EFZfoWzvLC++9/MRYCc0NyfAxn3YC7GZ8APCki60Qknw90DzCngOxDKCSvqt6LeyL7KrBTRG4UkZneR9+Kc920i8hvRaQ17pgB5uOeLqPker2I/EFE9nrn4gIirm0e5uJcWnjHkcVZqccE2nQGXh/CWSdF+/Jep8ldl2JsjdnOZ4+qDnivfYW0M7D/MENlHezfO84OnMxhFgI/CXy3nsC5P4LHER4n37gLgesDfe3FWZojOb+IyMtFZLWI7BKRbpx7bUTX2qM9piz7cA9QpTJ4zkWkRkQ+KyLPer+fTd6ufPLvDlzfsDxx2x6Ns0SC361C37NvAr8BbheRbSJynfdgsRD3UL4zcC2/SvHv9gycB6gg40LBeHwS5y4Y/NKIyFnAP+PMtVneDb8b90WP4lbgUu9GOBX3VAXuwvxWVZsCfw2q+v5iQnlPL/fhvlSv9TZ/DfcEdbyqzsQpiaBM3wUuFJFlOBfDTwNybA7JMUNVL/DG2qiql+JcFp/BKbWop6TfAK8r8AQVpqC8qvolVT0V5044Afg/3vZ1qnqhJ89PcU+GpbIV5wYbgohMwVmRnwOO9q7tXQG5tEi/23E/Hr8/wSmzbSOQcUhfOJdPBnfzPYhzLfjj1OB840GKyTpa5gfGT+FcYNsj2m0FXh/6ftV71kmpbMXFxIJ9TVXV38f4bNT5+B5wBzBfVRtxrroRXWuPBcS71htxX49jirYMoKpBmd6Ne/h5Ne4Bd7G3Pd99qBzsxMUg5wW2zc/TFs8jco2qLgFeBVyMe4jeilNaRwSu40xV9S3kfOd+CS6GXZBxo2BUdRMukPmhwOYZuB/6LiAtIp/AZUzl4y7cF/FaXHZI1tv+C5zZ+VciUuv9nS4iS+LI5imspeQypWbgAm89InIiMERRqcvCWIezXH4UcJs8COwXkX8Wkanek9FLROR0b5y/FJFmT27/6SH4dOPzHdwX50cicqKIpETkSG+eyAUR7fPK652Hl3sm+UG8oJ+I1HlzERo918z+PLIU43+Ay0XkXE/OYzwZ6nBPVruAjIi8npwCB/cDO1JEGvP0ezvwBq/fWlx87gUgzg0wzK3AP4jIsSISzC7K4ALv9SLyBm+cf/XkriSnishbvCfSD+OOM8p9+nXgU74bS0SaReTCEY75deBfROQkr69GEXlbzM/uBOZ52Y4+M4C9qtorImcA7wzs24W7mR6Xp7+7cL/fd4pIWkTegfs9/qKYIN539zfEd8dFMQN3zvfgHjY+NYq+YuHJ/VPg3717xUnkvCLDEJFXe/eSFO632g8MqOpW4LfA50RkpvcbXCwif+F91L9WtaEuzwZ+WUzOcaNgPK7FBeR97sYd5NM4k7iXAmai53f+MS549r3A9gO4m9dK3NNQJ85CKHSj+IqI9IhID+6G/q+q6p/wj+B+IAdwMZTvR3z+W7ig5qDf1DOF34TzD2/GJRrchHsqApdy/Lg35vXASs/nG3Wcr8FZJfeQyzKZDfwxQpZC8s70tu3DneM9OKsCXFB1i+cWeB8FvuD5UBeTuhyXqdaN+7Iv9K7Jh3CKYp8n3x2Bzz2Ju/E/65n2c0P9PuXJ82XceXwT8CZV7StVRuBm3HX6He669AIf9MbpBv4Wd5224ZRwxwjGGA0/w8Wc/ED3W7wbUJjrcefw1yJyAKeEXj6SAVX1J7jfyG3e9X8MGJbGm4d7cQ9jnSKy29v2t8C1nlyfIGANq+oh3E37Ae9aD4kvqeoenJv6n3Dfz6uBN6rqbuJxA+68jZRbcPeN7bjjGslDzEh4Py7eutOT4VacootiLu7etx8n42+89uB+J9NxGaH7gB+QCw/cg7PydopIJ4Bn7R2Pi1sWRIZaekal8J4QvgssClhShlESInINLnBbsnI3cojI/cAHVfWRassyUkTk87jpHFckPM71wOOqemOxtpNuktBYwDM3/x64yZSLYVQfVX1VtWUoFRFZigv0P4azRC/HxYMSRVVjT3yvqotMRG4WkedF5LE8+1eIyw5r8/4+UWkZy40X1+nCZXl9scriGIYxfpmJi8McxLm7rlPVonGnSlJVF5nnJuoBvq2qL4nYvwI3O7x4SQLDMAxjTFFVC0ZVf4fLnzcMwzAmGOMhBtMqIutxGRofUTeTeQgichVwFUBqSurUaXOmhZsYhmEYBejZ0rNbVYdVSxkNY13B/AmXstrjzd/4KS49bgheNsONADOOnaGnXXNaZaU0DMMY56y5bE24GsKoGdPzYFR1v7raT6jqXUCtiMQtH2EYhmFUkTGtYESkxSvxgTe7N4WbSGUYhmGMcarqIhORW3FlumeLSAe5stSo6tdx1YzfLyIZXKG9lWozQw3DMMYFVVUwXuHGQvu/gqvkaxiGMeZpqGlg5YKVzJk6h9QYdBBlybLj8A5ue+42egZ6Eh9vrAf5DcMwxg0rF6zkJfNewpQZU/C8+2MKVeXIA0eykpXctPmmxMcbeyrWMAxjnDJn6pwxq1wARIQpM6YwZ2rs5aJGhSkYwzCMMpEiNWaVi4+IVMx9ZwrGMAzDSARTMIZhGBOI+1bdx/mvOJ/Xnv5abry+aEX9RDEFYxiGMUEYGBjg2o9eyzdu+wa/eOAX3PmTO9n01KaqyWMKxjAMY4Lw5z/9mQWLFjB/0Xzq6uq44KILWPXLVVWTxxSMYRhGFalf9whHfPEG6teNfjHNnTt2MueYXIZYy9wWdu7YOep+R4rNgzEMw6gS9eseYf5bLkf6+9DaOrb++BZ6Tz9l5B1G1DmpZlabWTCGYRhVYtoDDyL9fchAFunvZ9oDD46qv6PnHs2ObTsG33du7+SolqNGK+aIMQVjGIZRJQ6deQZaW4fW1KC1tRw684xR9XfyKSfTvrmdjvYO+vr6uOund/Hq819dJmlLx1xkhmEYVaL39FPY+uNbmPbAgxw684zRuceAdDrNv33637ji7VeQzWZ566Vv5fgThy2hVTFMwRiGYVSR3tNPGbViCXL2eWdz9nlnl62/0WAuMsMwDCMRTMEYhmEYiWAKxjAMw0gEUzCGYRhGIpiCMQzDMBLBFIxhGIaRCKZgDMMwJhAf+9DHeOWSV/Kms95UbVFMwRiGYUwkLl55Md+47RvVFgMwBWMYhjGhOP2Vp9M4q7HaYgCmYAzDMKrKI52PcMPDN/BI5+jL9Y81rFSMYRhGlXik8xEu/9nl9A30UVdTxy0X3sIpLeUrG1NtzIIxDMOoEg9ue5C+gT6ymqV/oJ8Ht42uXP9YwxSMYRhGlTjjmDOoq6mjRmqoranljGNGV65/rGEuMsMwjCpxSssp3HLhLTy47UHOOOaMsrjH/vGqf2TdA+vYt3cfZ7/0bD549Qe55C8vKYO0pWMKxjAMo4qc0nJKWeMuX7jxC2Xra7RU1UUmIjeLyPMi8lie/SIiXxKRTSLyZxF5WaVlNAzDMEZGtWMw3wTOL7D/9cDx3t9VwNcqIJNhGIZRBqqqYFT1d8DeAk0uBL6tjj8ATSIypzLSGYZhlEaWLKpabTEKoqpkyVZkrGpbMMU4BtgaeN/hbRuCiFwlIg+JyEP9B/orJpxhGEaQHYd38MKBF8asklFVXjjwAjsO76jIeGM9yC8R24ZdOVW9EbgRYMaxM8bmlTUMY8Jz23O3sZKVzJk6h9QYfH7PkmXH4R3c9txtFRlvrCuYDmB+4P08YHuVZDEMwyhIz0APN22+qdpijBnGnoodyh3Au71sslcA3apaGdvOMAzDGBVVtWBE5FZgBTBbRDqATwK1AKr6deAu4AJgE3AIuLw6khqGYRilUlUFo6qXFtmvwN9VSBzDMAyjjIx1F5lhGIYxTjEFYxiGYSSCKRjDMAwjEcZ6mnLJHO4/TFtnW6JjLG9Znmj/hmEYEwGzYEZAW2db4krMMAxjvGMKpkR6+noG/5uSMQzDyM+Ec5FNFVhel1z/bV6ps4a6BvfeUzLmNjMMwxjKhFMwL66D1fOS6/+cLUAa2vqcFdNQ1zBozZiSMQzDyDHhFEzSrF7kLJdzOnLWjI9ZM4ZhGDkmnoKpmQqzErzB72uDTA+r5zXkrBkaBncHYzOmaAzDmMxMPAWTNLOWOyVDyJo52AO1DUOajrUkAFN4hmFUEssiGwmzluespEwPq+fB8ikuucAP/o81LOvNMIxKYwpmNMxaDmmnUFbPc3/L64D+nurKFUEwGcEUjWEYlcBcZKPFt2QiYjNjiba+3GvLejMMoxKMsdvgOCYYm5mHO7NJJhuUwDmPtrG8zubwGIZRWUzBlJOgNRP8X2X8eUE2h8cwjEpiMZgkGCOWS5jVixog0+OSEWToPovNGIZRbsyCSYqxqGT2tQ2674JzeMLWDJjbzDCM0WMKZjKRbw5P//CmtuSBYRijxVxkk40xMIfH0qUNY3JgCmayEpzDs6ihanN4TMkYxsTFXGSTmSrN4Qm65CzuYxgTF1MwRvQcngQ5p8Obh2OTPw1jQmMuMsPhx2bSycdhVs9jWLp0cPLnWHebdfd2097VTndv94Qbr9LHZkxszIIxhpJ0enXIUgpaM2Nl8md3bzddvV001TfRWN84bN/6nevJapaUpFh29LJhbcotS6XGq/SxGROfogpGRD4A/K+q7quAPMZEJ1TtYPU8OGdLD8vrGvKWsimF0SqlYjfZrt4uspoFIKtZunq7Yt+ECymufIxmvFLo7u1mS9eWioxlTB7iWDAtwDoR+RNwM3C3qmqyYhkTnoi4T1Qpm1IZbcJAsRt6U30TKUkNKqCm+qaC/flKpTZVy6Z9m0q2DkodL2rsYgotqFR9Sh1rJOMaE5+iCkZV/1VE/g14LXA58BURuR34H1V9JmkBjQlM2JpZ1DDMmimFclQkKHZDb6xvZNnRy0q+cQuC4p7L8lkHUTfmUsbLN3YxhRZUqgCz6mexqGkRAO1d7aMad/GsxfRn+03ZTFJixWBUVUWkE+gEMsAs4Icico+qXp2kgMYkIKBowtZMKeSrSFCKkolzQ2+sb4x1swzeuBUdVDJRiquQQog7Xr6xi7m7wkrVVy4jiceEx924d+PgMVtMZ/IRJwbzIeA9wG7gJuD/qGq/iKSAjcCIFYyInA9cD9QAN6nqdaH9lwH/CWzzNn1FVW8a6XjGGCeilE0pSQfnPOo+20bOtTYSa2YkN/QowjfuQk/zpcZairmhSnGtRSnV9q72EcVjguPGsdqMiU2cZ8Qjgbeoantwo6pmReSNIx1YRGqArwLnAR24OM8dqroh1PT7qvqBkY5jjDNCkz9LWfJgcFmCDmg72AO1Q2M4UdZMkvGC8I0bnCKJohSFEMf9FRy7NlU7OG6+Y/SVqp+mXJuqHVHsJzxuMO400piOMX4pqGA8K+WtqvrJqP2q+sQoxj4D2KSqz3pj3QZcCIQVjDEZCVgzJRGqSFCoakCcG3WUAipFKQVv3IXGKiXWEtfa8bfFdXWVK34StACn1023gP8kpqCC8ayU9SKyQFWfK/PYxwBbA+87gJdHtHuriPwF8DTwD6q6NdxARK4CrgJYcNSUMotpVI2RzMmJmGcTtmZ8RTOrflbBG3WUUoDyxCaCY23fv51dh3bRPK2ZhU0Li/ZVirUTVxkt3dTNjt1baDs6C+La9mf7C8oTR9GWy91ojE/iuMjmAI+LyIPAQX+jqr55lGNLxLZw+vPPgVtV9QUReR/wLeDVwz6keiNwI8BpJ8ywFOrJTOQ8G4ZYM36mWSabGfLRXYd2sa83N92rN9M75Ob8xO4nmNMwZ9SxiaBS2L5/O0/vfdqJ7I09d+bcgn1Fud7yZXs11TcNxkIEiVRGSzd18/nPrueho7P86t3QmwZJjd5NZxhxFMy/JzR2BzA/8H4esD3YQFX3BN5+A/hMQrIYE42oeTahGmjpVJqGugYy2QzpVJp0aujPIer9rkO7Bt+PNDYRVATB/vz3xRSM318c11sclj/ZRW1/lldthbu/A/91wSy2LF9U0JUWd1KmzYmZ3MSZB/PbhMZeBxwvIsfissRWAu8MNhCROaq6w3v7ZmA0MR9jshGjakCUYvEJK6DeTC8NdQ3USA21NbUsmb1kxLEJn+ZpzUOspuZpzQX7CN+wi7nAunq7BjO5FI1UBG0nNtFfm0IzWU7vTDFn9iL2xYjT+ORTtGblGHHSlF8BfBlYAtThUooPqurM0QysqhmvDM3dXp83q+rjInIt8JCq3gF8SETejJt7sxe4bDRjGpOUAtZMcdL4P5M2z0E8Y8oMADZ3bQZGV57Gt1b8GEwh6yXqhl0sHhMnXrNhcSP/dPUylj/ZRduJTWxYHC/BAHKTMqMUR6XK3BhjFylW9UVEHsJZFz8ATgPeDRyvqh9LXrzSOe2EGfrQf59WbTGMscpIMtM8ztnSA+mGYYU5G+oaKlKYs72rfVCpARzbdCwLmxYWdUOV003V3dtNW2fbYExnecvy2FlpZsGMbdZctuZhVS3rzTPuTP5NIlKjqgPALSLy+3IKYRgVI+Q281l7KMOaQxlWTEvTOi36Z+FP/jynY3jVgEosmpbPGimWqVWJTK5ylrkxJg5xFMwhEakD2kTks8AOYHqyYhlGwgRSoNfu7+bc59bTl81Sl0qx6qRltM6MuBlGrPw52qoBpTAWbthRMR3In7ptacqTmzgLjv0VLkbyAVya8nzgrUkKZRiVZM3+LvqyWQaAvmyWNfujZ9v7C7KtPZThtQ1p/t8RGZbXAf09w5omtWhaY30jC5sWlnTTLuciYr4VBbngflSsxTAgXhaZXyLmMMmlLBtG5djQDeu7YFkTLG1kxcwm6lKpQQtmxczo1OO1+7v59p6p3LxzBwMKdQKrFjXwsQx5rZlMNkPztOaKWRxhV1W54yD5rKiRLilgTGzyKhgReZThEx8HUdWXJiKRYSTJhm64ej30Z6E2BZ9dRuvSRladtIw1+7tYMbNpqHvMU0ZrT6rl3IOb6M1mUQUE+gZgzXN9rF4MpOHv7s9w9IZD3H/8NFbPgUw2Q09fDz19PVVb/TKJTK6w22ssuO6MsUkhC2bEhSwNY8yyvssplyzu//ouWNpI68zG4XGXgDJa8xdC3wodfOKSLNRlYcXjM+CJgzBtP1/9TpaBfuj/bQ9vvqyG+xbmKgX4lQBeMe8ViR1aWJl09nQ6WQssExBm6abuWOnKYSzWYkSRV8GEqycbxoRgWZOzXHwLZlmBG25AGa14Vqn7C6EvpaQH4PJH4N2PQ+u2vTCgrvBRFmoUagbgbdtqWTt/aKpZ/0D/YEXnkd7ICxEuld/Z0zmYTjynYQ4tDS0FlYBfMqa2P0t/bYp/unpZ2WQzJidVm2hpGFVhaSN8dtmQGExeAsqodWeKVY2LWXNEPyv21tJ6dD9ILzy3w1lDKSAloAppeO8r03yvLkM3DTxx+BDp2mmkU2l6+nqo/eND/OdNPUzJUNYbedBV1ZvpZUePK4KhKPXp+qIWhl8ypkZBM1mWP9llCsYYFXHSlL/C8ImWi5MUyjASZWljYcUSbBdQRq1LG2kFVzXvpTgX2j07c9bQ+xfD/n44bheckGZ1BkinOafDPYv5NdBe9WyGugyJ3MiDNcp2HtxZUuA9WDImk07RdmLuM6OdrGk1ySYnNtHSMAqwdh6smQkrZuKUS5C81pBX4j5PDbT7j0vTlwbNQH8NfGNuJ7u7KOvNt7G+kcWzFg+WoInTb76SMaPNRLMZ/ZMXm2hpGHlYu7+bcx8vMgGzkDWUpwZa//Fw0ZUNnL7xEPcsncK6Iw5D1+aSFj0rRndv9+Bqkt0vdDO9bnpsJRO2pvJlosWVy2qSTV7iTrRMYRMtjUlG7AmYhZi1fHCCJniKJtND//Fp/vvsFI8elZsJ4GeaBfGf/jd3bWb9zvWxJ0uWc/Jj1OTKUuSK+rwxOYg90VJEBoA7gG2q+nzSghlGtYk7ATMWgRpog9bMFugmzSOBdc/8TDNw5WZG+vRfyqqXxYia59Le1Z5XrrBlMxJ3nTExKDTR8uvAl70S+o3AWmAAOEJEPqKqt1ZKSMOoBq0zC0zAjMna/d1DPx90m3nFM1+2JZdp1pvpHfxsW2cbxzYdOyJFUe7Jj+F5LvkUWL5lpkfirjPGP4UsmLNU9X3e68uBp1X1IhFpAX4JmIIxJjyREzBjsHZ/N99+vpObn+9kQHVoDCdY0TnTw58WNXDOlhSk07T1DS03s7lrM9Nqp42o3EySkx/zKbB8rjmLwUxOCsVg+gKvzwN+CqCqnYlKZBgVZO3+bj7d0c7a/aMvBBns89zH13PDzh30qeaP4cQsnplOpdnXuy/WTXnppm7e+Yt2lm7KHU85i10GiSq82VTfhCCAqyDQVN9kMZhq4Az1AAAgAElEQVRJTCELpktE3ohbzvhM4AoAEUkDUysgm2EkSqwssRHgJwcMlpWBvDGctTXH5pYKEFi1sHDxzELLAETNxF87L38p/UphtcomL4UsmL/BZY7dAnw4YLmcC9yZtGCGkTRlyRKLwE8OqAGmiPA3LXPyKq8hMiis0ebB2IyvTJa3LB9cNbPQMgDBmfhpbwJnpUvp51svZiTLDBjjn0K1yJ4Gzo/Yfjdwd5JCGUbZCZXohzJniQVondnIFxct5kd7d/HWI5q5as7cvG2HyCDuPQP7hrTp7u2mN9Nb1MUVNRO/qT5X7NJ3WRVitDPuy5m9Zox/Ys3kN4wxSYTSyNsuVKLfr6C8avpi1mzdxYqaBlrv7IJl5O8r5nhr93fz4Wc30qfKfV1dnDx9el7X25BMNdnl2gX0SyabGXRxrd+5nmm10/If5uJG3nX1YnT3LmR2M3sXN0JIKe0+uJstXVtontbM9LrpZV87JuwOA2jvajfX2CTFFIwxdom6ofvbZtbC1zYNUxqRrO+Cvqxb3agvV6KfDd20fmwTrX1ZUO+uXivwueWFx6sReF0LnNcSOeaajZ30ZZWBFPQNKGs2dtJ6av6b62Cm2r6cZunOZOjqaqdvoG+IiyuTzeTrhu7ebn5Xu4lsS5aUdLOsd/owl9XWA1sB2NebG6vca8cE66FVO/5jVBdTMMbYJMrqgNw2EciqUxqBdV2G9bG+C3oyuaXzFPf+1nZ4vtd9NrisXr/CPZ2DCihyvKzCnTtcocsIxbZiC9Qd6WIqdVn3nlPjH/raQxnWH+ohe8hlkwXXc0mn8v9koxRE0GWVj6i25XBvWYkYo9BEy38s9EFV/UL5xTEMj6iFwSC3TTRXHj9qXZewcvAR4Ecd7nM14v6yoYVb/7QPProe6lPDx/OVTAHF1rqkhVXXd7LmGGXFNqH171tKOvQ1hzIE1UFLQwv7evexZPYSNndtzvu5KAURdFntObSH/X37h30uqm05XFoWjzEKWTAzvP8vBk7HlYkBeBPwuySFMgyWNbmbv68IfAXib0sL/N3xrjy+v+/W9tzrb2/JucVSmvtc0BJB4YI58Mc9sCsw7Wt7r/sDt/pRilw5/k0H4O5Ot8hYvgXLljbS+vfLaV3fBZcUiQ9FsGJamhQMKpmWhhYOZw4XveE31jdyUX8gBuO1911WTfVNPNL5yGD7E444gf5s/xBlEpycOdqAv6UnG4WyyP4dQER+DbxMVQ9476/BrQ1jGNXl2OnDXVk1nrWS8ZSIrxzOnA1P7ocTZ8Jvn3dFjwQXR1k8A774dPQYx0yD5ilwVjO8wcsGO68lXnJBiLW/eoY1HbtYMa+Z1vNflNvhu/KOy8AJbbROS3PRvhTak6Jjei2t65/kPx/r546X/JG2l08Z1q+/OmZ3Qy2n/XYjD8xTzuzo4gfvmj6kMnJjfSOntJwS64ZfrviJLaU8uYkTg1nA0Fn9fcCiRKQxDJ/1Xc5KUNx/30UW3ra0cag7TT13l+IUyCmz4EUNcLsLbg9aJuCUzOaDTlGlxSmloOkAsO0QdByCx7pzCq3YgmUbuuEjba6/tEsaWPvcbs6t30rfi6FuYCurfoVTMuG2n3QrYfzoa1kG+rNkUxnSA67bV290Af5vvzxXDDM4ufL38+F1fwV9NVA3oHyovRNCpffj3vAtfmKUgzjl+r8DPCgi14jIJ4E/At9OVixj0uMvV+xbIDNrXVC+RnLbfPdUsG1a3F8KqEvBuxfBMz15h+G+XU5BBeMwJzfC3Ho4eaYX1McpsHs6nRtuQ5GSK/d0umQBxf3/2ibWPLuTvhpcZlkK1nTsim77HYE/zABvxctaT7n4UaQL/uwUpD+z/+h1TwxOrvzdQoaOsSjuyR5Oucq7JFWmxhgfxCnX/ykR+SVwlrfpclV9pNBnDGPUBFeLDKYIpwSOnwGvn5OzIsIrS8JQF9ZZzfDwvuhxzmp2lkltKudie3K/s5B2veC53LwYzq+82Es6lMocZl/f0PdPHmDFIahbGsgsq58Z/dmnDsCzPblxAQlYVBvmDG1+/3FpXkhD3QCc2SHUeFluKRH65rYwlaGxlNYOhq1YGUU54ieWpmzETVOeBuxX1VtEpFlEjlXV/OksMRGR84HrcaHUm1T1utD+KThr6VRgD/AOVd0y2nGNcYLvirq1PecCyyo8fQC2HHRt/CB/2G0VfO3HTu7b5RTK9sNw/y54VSCu4iuo53vhrh2em8xLAjiqHp48AL/f7doGU5mD+LEUFcK0boVV33JWxYot0Ppab1HY81qc4soELKgBhUXTnYJrnsLa/oOsWQgr2qGhQVhel6tTtm5hmte9p4bzttayZ5pw93d7eWAenNkBP3gXrJ2Xu8mnVfjC/8JZW3SwVlkhJTNazM1mFFUwnlvsNFw22S1ALfBdXAHMESMiNcBXcZWaO4B1InKHqm4INLsC2Keqi0VkJfAZ4B2jGdcYh/gZZb4by08R/vLGXJpyoYmW4BTJG+Y6JeBbQz/b5oL/wbjKhm43v8Wff+NPprz+qcIyBhMNwgiQFlp3Qut2zbn8bm13/73jWjsvoICedQp0bWOGc9/jx1VgVf0UVs+Dczqg7WAP1DbwhwXCY4vr+YfVvbxqi7JiM2RSysYnu/jl7ECpfJQH5sGKzaBerbJ8CiZsfSyetXhYxlkxLE3ZiGPBXAycAvwJQFW3i8iMwh+JxRnAJlV9FkBEbgMuBIIK5kLgGu/1D4GviIioqmJMXlK4dOMB72uQb6JlFFHza8KWT9Dd5u87r8WlJ/vB+PNa8vcb5sg6+LeTcu2CLj9vTs3aeQxVJN+C1g6ncIbEVY5UWjM9rJ7XwDlbGFJ1+f7j0vTVgA5Afw2DtcgGb/IIZ3Y45ePXKstH2PrYuHfj4GTPuK4uS1M24iiYPlVVEVEAEZleprGPAbYG3ncAL8/XRlUzItINHAnsDjYSkauAqwAWHDU8jdMY5/gZZRCdGZbF3bR9CtUM8xMCfAslzzyWYZ9b2ujiLnH69Sdi+pwwc2i8KOjy8xiiSNS9b+3wqgJknXKpS6VYcfQSGHDeab/qsm/NrFvYwOsuc+6y+49Ls65hM8vrlw+5yf/gXbAxRgwmaH34lQSgdFeXpSlPbuIomNtF5AagSUTeC/w1cFMZxh7uqB76s4zbBlW9EbgR4LQTZph1M9EIK4V3L3I3ej8OLrhYDOQtbDlIPgslDoXSk8NJCV/e6JRijcA75g8/Hn/iZwoY8BTJgJsDUJcSVjznvsatO2DV4fmsGehhxfxmr2imt+yyt/zy6pOXc86jbXDEctpo47HFXql/r7R/8Ca/YTGx4i5B66M2VTu45LG5uoxSiJNF9jkROQ/Yj4vDfEJV7ynD2B1A8Jc3D9iep02Ht9BZI7C3DGMb44l8SqEuoHT8mIZfXyyfC8zvr8TZ9bHl9OM4/nyaYhMBUgJvnUfrMz2s6m1gzUvSrJjZROtbDrqkhBc10PqlDlozCuku+Nz0ZGSPIKiYwpWXDSMOcYL8n1HVfwbuidg2GtYBx4vIsbhVM1cC7wy1uQN4D7AWuAS41+Ivk5SoLLGoNGa/vhgFSrkUI+hig9KtnfVduUoCmcCEUL/f53tdJhq4/4cysKyJ1oFaWu/rh5kHc8fzyL6cKy1f9loFMFeXMRLiuMjOA8LK5PUR20rCi6l8ALd4WQ1ws6o+LiLXAg+p6h3A/wDfEZFNOMtl5WjGNCYYUWnMwdTiUl1gEF12xq87FpWpFhXvmVk7tHrzU/vhzu05pRF2/A6mRXuEqwmUwOntGV71bIadp3fT1lC8/WgIzq8BzMIxhlGomvL7gb8FjhORPwd2zQAeKMfgqnoXcFdo2ycCr3uBt5VjLGMCE47R5FmnJZKwgshXdsafyR9smy/es+nA0DEe2AN/2JtLVAgTVibh9ylPhqjstQBLN3Xznzf1UJeBzOr1bLxiGv2lFXKOTTCNWTyNWWqWmTHxKWTBfA/4JfBp4KOB7QdU1eIgxthhpIH7KAURVFZBC6ZGhlZR9seLiveEZ/LD8CUBSuH4GW6+TpFjW/5kF3UZSCuQyfKqZzOsDudllolgGrMG8m5sQqURpFA15W6gG7gUQESOAuqBBhFpUNXnKiOiYcQgKnBfbInj8EqX397iMtSiys4EZ/j7yiRfyvOsuuFj+W4xDb1Oee8HChzbMVNzsaYCCqbtxCb60qAZGEinuP+45NYTDKcxQ86CsSwzwydOkP9NwBeAucDzwELgCeCkZEUzJj3FFESxz+ZLV8630uXD+1zV5M8ug0sX5vqKmuHvyxRlOS2eAewYKo+IW7QsSy5F2X/9d8fDuj3OleZz6izYcRjmTIV7n3fb/Hpqfnmb8CEvbuSiKxu8GMwSNw+mtLMWm/AkSrAYjDGcOI84/xd4BfAbVT1FRM7Bs2oMIzGKzWcpRj73Vb6VLn0KpTZHKZMoyykcgwHnWvOHy2ouzpJRN4fnmpNdIoCXmsxPOty+Hb1D+/nVjrwKBlxtsnUL0yxvaeSFjhdY37me5mnNzJ2Z/zMjJZxZZorFCBOnXH+/qu4BUiKSUtXVkNiDkWE48i2ZvKG7eMn8Dd35S/uHg/g1krvxh9uGWdroLJtiiq79UPR2f4Z/NrTNL9z5hrlw3TKXtuyX8A+Hbo6McL9FsH3/dg5nDrOvdx9P732a7fvDU8wMI3niWDBdItKAWyb5f0XkeSCTrFjGpCcqvhHHqgmnGV8wZ2hWWbjf9y92FsTM2qGVmUdDX54cY/9xLrz7yf052dd3RScJgEvmf/uCWCLs6Nkx7H0SVkwUo11q2Zg4xFEwFwK9wD8A78LNpr82SaEMI9IlFZzvks+VNaTopLr5MOUqFROXZU1uXZcgtV6sZX+/s1j8uAq4ZQPCitGfC1MDfPCEgspv7f5u2l/opSmwqFddzVBLJ/w+KfKtAWNKZ3ISp1TMQQARmQn8PHGJDCMfcQpVjrSY5Uhn7wc/t9kr71If8jyfOstlpwX7mj0ltybNe180fLIoONddSnJLNUew9lCGc59bz+FsltTO9UyrnUY6lWZB4wL2HHJJAylgQeNwy2fppu5Yi4+VQtQaMIAtPDZJiZNF9jc4i+Uw7uvvlxg8LlnRjElNPndYMetjJBZKqbP3g5/7SJsLxgv5Z9+f1Ty8j/e+yP35/fgxI9QlH2S9GMyARltqHmsOZejL5m7ofQN9ZLIZju04yOe/C7+f71a6/MG7XKHLwdO0qZvPf3Y9tf3Zsi4+Fl4D5pTdtejuLTxytKtgYPNkJhdxXGQfAU5S1d1FWxpGuciXBRanUGWpxSwLzd4vtM7MPZ25mmL55lEGKz1HERUzWjwjV1amSD21FdPS1KVSHM66+Sh9Ay5+8/PURj48AB+/L7f42IbFOVfVy9t7qe3PUqPFFx8LU8jdFUxfPmV3Lf/72U184i+ycDSDc4AyAxbCnSzEUTDPAHnSYgwjIeK4upIYK2zBjHZcZehaNWGiYkZvmOvcYjGssNZpaVadtIx3Pf0EvbWzBoP7GVHuPQ5atzG4uFgwPvL544TzFwmvah+6+FixWEm+GEsUx7cfoLY/y3q/XI13anv6e4qcNGOiEEfB/AvwexH5I/CCv1FVP5SYVIaRz9U1msmXhcZ6/2IXPzmrOfbNfdgqlxfPg2d6oG8AHt2faxc1L8YnnyItwQprndnIwin1dE9rGVQwkkpx57IpzG1uGYyxdHW1D8ZHMqJ84C9nc8KuAWR2M3s966aY8oiKsQTbRCmxi55Qfv0iBi2Y5mnNsY7LGP/EUTA3APcCjzLiGq+GMQLCN9nRTr4M9hMuWum7pKJm8uf7XL5VLq9/aqiCKXaMZcpqa6xvpKGugUw2w5LZS9g4ZTPfe9lCZ5V0tQ9zTT1es5vHWyAl3SzrnV5UecDwGEu4LEywj4woH/3LOVzxRD3LBw7yZP1+mqcmM+nTGJvEUTAZVf3HxCUxjGLki8uUQjAwn5acgvBrkuXrN59yi7I0gpaN73Lb0F14NcxRKJaoNGWf7t5uHul8pODnfWVSTHnA8BIxvgLyXWu1qdohffQd08LXjoE/72wnm8myrWcbs6fPtiD/JCGOglntrXn/c4a6yKyislFZyhGXCQbm+xW+v9XVCPOD9FmiYyaFSs9ElY/53HI31t2drkjmPTtLs7hiugKDacrS2TZY2Xj9zvVMqZnCU7ufivxcVIHKfMojTLhETNi1tnjWYvqz/YN9tAdcc5ZFNrmIo2D8VSb/JbDN0pSNylMOd1J4lvzaUHJkvqyvUisL+GvLDGjpFlcJrsBgmnK4bP7hzOFh7afUTGHujLl5C1SOZOXKsGutP9vPwibnYuzu7aY304sgVm15EhJnouWxlRDEMGKRz50UNVEyqvxLuJR+ML1YgLqU+9yt7cOtkqjKAvlca+G5LaVYXCW4AsNpyr6SCb4OIsigK2vuzLllsSTyudbCi5LNaZhDS0OLWS+TiEIrWr5aVe8VkbdE7VfVHycnlmGEKOQyipoomdHc2it1ASsgHB8RcguKva5l+ByUsFUSHDu4NHIWV/7/1na3/asb3RgphtdDK0YJrsDWaWm+uGgxH21/lubG49jes51MNsOCmQt4eu/Tw9r3DvTSO9DLvt59ALED7sXmviyetZhdh3bRPK15cH94UbL6dL0pl0lGIQvmbFz22Jsi9ilgCsaoDGEF8rqWoTfsfBMl/f99oYmawcwv//Ol1Dvz2d+fq2sB8KOO3Ph+vqW/kFgp7rwSXIFrD2X48HObOJzN0r1vE1NqpsQeZtehXYMKppACKZa+3N3bzaZ9m8hqlu4XXKJBf7Z/WMDfXGOTj0IrWn7Se3mtqm4O7hMRc5sZlSOY5ZVVuDMUNI+aKNkfcA8pOesimGLsE3xdSiLBsiZnHflry2Q1ekZ/vurIhYiZWbbmUIYXAqVi/LhL2HqZUTeDpilNbD2wdXCbPx+lmAIplr4c3r9x78bBeEs44G9MLuIE+X8EvCy07YfAqeUXxzAiCLqiYHjMI/zEv/kg3P4cbPcW6xJy1kW+1S2DiiduIkGw7czanGstah2XhDgyJbEmpzXUNfCiI1/E1Nqpg64s33oppkCKpS+Hl0/2Yz/hgL8x+SgUgzkRtyxyYygOMxOoT1owwxgk7IoShlsXvnLwJ00G12QRctZFvtUti81tCeKvPHlWsyvr4rf1KwCs2wuPFlgQrYzsyepgZf8g4SD/jLoZgIu5hOMuxRRIsfTl4P7aVO2gu8zcYkYhC+bFwBuBJobGYQ4A701SKMMYQtiCaZ0N75jvXoezvfx4TLB9KhDMr005d9lH17uy+sUmWIa5czt80XM/PewC5YNLGPuK6fneoQomnLlWRlZMSzPFyyJLSYopNVNQlFn1s4YsOtafzV9wM878l2Lpy8H90+um29ovBlA4BvMz4Gci0qqqaysok2EMJWjBCHCiexqPtD78GEpfQMlk1WVyHVXvlMvtW4ePkW+CZTj9+fbnhu6/b1dOwfiEa5Sd10JSBItdNs1awuYuFy5tacjVJYtjSYxk/ksl+jLGN3FiMBeLyOO49WB+BSwDPqyq301UMsPwCQbTfddYoXL+n12Wm0XvWy1+1tmVD0aPETXBMir9uT8UXDkronBjvhplCeEXu2zryuXi+HXJmqc1myVhVI04Cua1qnq1iFwMdABvA1YDpmCMypAv8J4v28tXNOe1xLvJp4jOGItKfwanjObUw9sXDLdewjIkwb42yPTAvjbO2dIDHW20BRLVevp6aOtsI51KW4DdqCpxFIzvN7gAuFVV94pIgiIZRgRRqcVxVrcMb794Xi6GAvD2+dCQju6j0Dox/7wkcctkGPvacq/TDZzTAW0vAFmnVBrqGgCXMba8ZXllZTOMCOIomJ+LyJM4F9nfikgz0JusWIYRg5FYCb7FEcwCK9R/UIlBxdxew/CtlnSDs1rSDc5qqW0Y1tSUizFWENXiCfsiMgvYr6oDIjIdmKGqnYlLNwJOO2GGPvTfp1VbDMMoD0GrBZzVcrAHahuGWC1gisUYHWsuW/Owqpb15pnKt0NErg68fY2qDgCo6kFgVKtZisgRInKPiGz0/s/K025ARNq8vztGM6ZhjDt8qwU4Z0uPUy590BPxTGjKxRiL5FUwwMrA638J7Tt/lON+FFilqscDq7z3URxW1eXe35tHOaZhjA/2tQ1aLud0MBhraeuLjrWYcjHGKoViMJLnddT7UrkQWOG9/hawBvjnUfZpGOMb3x0WEWvpUQhGW0ypGOOBQgomXP0p376RcLSq7gBQ1R0iclSedvUi8hCQAa5T1Z9GNfJW3LwKYMFR8avJGsaYIRBrOacDSOcyxADLEDPGJYUUzDIR2Y+zVqZ6r/HeF61FJiK/AaKmMH+8BPkWqOp2ETkOuFdEHlXVZ8KNVPVG4EZwQf4S+jeM6hK2WjoYZrX4bjFTLMZ4o1CpmJrRdKyqr8m3T0R2isgcz3qZAzyfp4/t3v9nRWQNcAowTMEYxrgkymrxMsSCmHIxxitx5sEkwR3Ae4DrvP8/CzfwMssOqeoLIjIbOBP4bEWlNIwkiLBaBidMmtViTCCqpWCuA24XkSuA53DlZxCR04D3qeqVwBLgBhHJ4rLdrlPVDVWS1zDKQ3DCpFktxgSnKgpGVfcA50Zsfwi40nv9e+DkCotmGMkQw2oBUyzGxKJaFoxhTB6irBYr82JMAkzBGEZSWHFKY5JjCsYwksCKUxqGKRjDKCtmtRjGIKZgDKNc5LFarMyLMVkxBWMYo8XKvBhGJKZgDGOkWJkXwyiIKRjDGAlFyryY1WIYpmAMozTMajGM2JiCMYy4WHFKwygJUzCGUQwrTmkYI8IUjGEUwopTGsaIMQVjGFFYcUrDGDWmYAwjjBWnNIyyYArGMHyszIthlBVTMIYBVpzSMBLAFIwxuTGrxTASwxSMMXEIKou4WHFKw0gMUzDG+CeoWGaVoAz2tVlxSsNIEFMwxvgmbLWUYMVYmRfDSBZTMMb4JKomWIlYcUrDSBZTMMb4I2ZNsGKY1WIYyWIKxhg/xJxdXyqmXAwjGUzBGOODEmbXx8UUi2EkiykYY2xj81QMY9xiCsYYHSOZe1IKNrveMMYtpmCMkZG0YvExq8Uwxi2mYIzSCAfaPcsiSaJm14NZLYYx1qmKghGRtwHXAEuAM1T1oTztzgeuB2qAm1T1uooJaQwnKj04MAM+KcxqMYzxSbUsmMeAtwA35GsgIjXAV4HzgA5gnYjcoaobKiOiMUjUpMY8dbuSxBSLYYwvqqJgVPUJABEp1OwMYJOqPuu1vQ24EDAFU0mKTGpM2qJo62wzq8UwxiljOQZzDLA18L4DeHlUQxG5CrgKYMFRU5KXbDIQw2rxXVdtnckF/E2xGMb4JTEFIyK/AVoidn1cVX8Wp4uIbRrVUFVvBG4EOO2EGZFtJhyVSg8uUIrFLAvDMAqRmIJR1deMsosOYH7g/Txg+yj7HP/4iqWUsvQjGaNAKRZTLIZhxGEsu8jWAceLyLHANmAl8M7qilRlAuVSkrRgbFKjYRjloFppyhcDXwaagTtFpE1VXycic3HpyBeoakZEPgDcjUtTvllVH6+GvFUnolxKktikRsMwykG1ssh+AvwkYvt24ILA+7uAuyoo2tgjWOQxaFkkiVkthmGUgbHsIpvcVGlSYxCzWgzDGA2mYMYaJaQHJ40pF8MwRoMpmLFEjEmN/n+7+RuGMdaZeApm4HDlKv2WmxhWiykWwzDGCxNPwYxjbFKjYRgTiQmnYJ7qI/E03qQIT2o0q8UwjPHMhFMwh5Xk03iTwqwWwzAmEBNOwUwETLEYhjERmHAKZmrt1HF5cw5WJB6P8huGYYSZcArmcP/hRMvHJ4kpFsMwJhITTsGMVwvGMAxjopGqtgCGYRjGxMQUjGEYhpEIpmAMwzCMRDAFYxiGYSSCKRjDMAwjEUzBGIZhGIlgCsYwDMNIBFMwhmEYRiKYgjEMwzASwRSMYRiGkQimYAzDMIxEMAVjGIZhJIIpGMMwDCMRTMEYhmEYiSCqWm0ZyoqI7ALaqy1HAswGdldbiApgxzmxmAzHOVGOcaGqNpezwwmnYCYqIvKQqp5WbTmSxo5zYjEZjnMyHONIMReZYRiGkQimYAzDMIxEMAUzfrix2gJUCDvOicVkOM7JcIwjwmIwhmEYRiKYBWMYhmEkgikYwzAMIxFMwYxRRORtIvK4iGRFJG8KpIicLyJPicgmEfloJWUsByJyhIjcIyIbvf+z8rQbEJE27++OSss5UopdHxGZIiLf9/b/UUQWVV7K0RHjGC8TkV2B63dlNeQcLSJys4g8LyKP5dkvIvIl7zz8WUReVmkZxxqmYMYujwFvAX6Xr4GI1ABfBV4PLAUuFZGllRGvbHwUWKWqxwOrvPdRHFbV5d7fmysn3siJeX2uAPap6mLgv4DPVFbK0VHCd/D7get3U0WFLB/fBM4vsP/1wPHe31XA1yog05jGFMwYRVWfUNWnijQ7A9ikqs+qah9wG3Bh8tKVlQuBb3mvvwVcVEVZyk2c6xM8/h8C54qIVFDG0TIRvoOxUNXfAXsLNLkQ+LY6/gA0icicykg3NjEFM745BtgaeN/hbRtPHK2qOwC8/0flaVcvIg+JyB9EZLwooTjXZ7CNqmaAbuDIikhXHuJ+B9/quY1+KCLzKyNaxZkIv8eykq62AJMZEfkN0BKx6+Oq+rM4XURsG3N554WOs4RuFqjqdhE5DrhXRB5V1WfKI2FixLk+4+IaFiCO/D8HblXVF0TkfTiL7dWJS1Z5xvu1LDumYKqIqr5mlF10AMGnwXnA9lH2WXYKHaeI7BSROaq6w3MnPJ+nj+3e/2dFZA1wCjDWFUyc6+O36RCRNNBIYTfMWKPoMarqnsDbbzDO4kwlMC5+j5XEXGTjm3XA8SJyrIjUASuBcZNh5XEH8B7v9XuAYZXNMvYAAAJlSURBVJabiMwSkSne69nAmcCGikk4cuJcn+DxXwLcq+Nr9nPRYwzFId4MPFFB+SrJHcC7vWyyVwDdvvt30qKq9jcG/4CLcU9ELwA7gbu97XOBuwLtLgCexj3Nf7zaco/gOI/EZY9t9P4f4W0/DbjJe/1K4FFgvff/imrLXcLxDbs+wLXAm73X9cAPgE3Ag8Bx1ZY5gWP8NPC4d/1WAydWW+YRHuetwA6g3/ttXgG8D3ift19wGXXPeN/T06otc7X/rFSMYRiGkQjmIjMMwzASwRSMYRiGkQimYAzDMIxEMAVjGIZhJIIpGMMwDCMRTMEYRhkRkYtFREXkxGrLYhjVxhSMYZSXS4H7cRMODWNSYwrGMMqEiDTgqgxcgadgRCQlIv/tre3zCxG5S0Qu8fadKiK/FZGHReTuyV5515h4mIIxjPJxEfArVX0a2OstOPUWYBFwMnAl0AogIrXAl4FLVPVU4GbgU9UQ2jCSwopdGkb5uBT4ovf6Nu99LfADVc0CnSKy2tv/YuAlwD3e8i81uDIkhjFhMAVjGGVARI7ElaB/iYgoTmEo8JN8HwEeV9XWColoGBXHXGSGUR4uwa1muFBVF6nqfGAzsBu32FZKRI4GVnjtnwKaRWTQZSYiJ1VDcMNIClMwhlEeLmW4tfIjXPXrDuAx4Abgj7gy7n04pfQZEVkPtOGqRhvGhMGqKRtGwohIg6r2eG60B4EzVbWz2nIZRtJYDMYwkucXItIE1AH/YcrFmCyYBWMYhmEkgsVgDMMwjEQwBWMYhmEkgikYwzAMIxFMwRiGYRiJYArGMAzDSIT/D+8b7IkqAJLhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualising the Training set results\n",
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_train, y_train\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.1),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.1))\n",
    "plt.contourf(X1, X2, nb.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('orange', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j,marker='.')\n",
    "plt.title('Naive Bayes Classification our implementation(Training set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualising the Test set results\n",
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_test, y_test\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.1),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.1))\n",
    "plt.contourf(X1, X2, nb.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('orange', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j,marker='.')\n",
    "plt.title('Naive Bayes Classification our implementation(Test set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GaussianNB(priors=None)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#lets do the same with sk learn and compare\n",
    "# Fitting Naive Bayes to the Training set\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "classifier = GaussianNB()\n",
    "classifier.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Predicting the Test set results\n",
    "y_pred = classifier.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "cm=confusion_matrix(y_test,y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualising the Training set results\n",
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_train, y_train\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.1),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.1))\n",
    "plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('orange', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j,marker='.')\n",
    "plt.title('Naive Bayes Classification scikit-learn(Training set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualising the Test set results\n",
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_test, y_test\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.1),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.1))\n",
    "plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('orange', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j,marker='.')\n",
    "plt.title('Naive Bayes Classification scikit-learn (Test set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
